package com.syf.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.syf.domain.User;
import com.syf.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.syf.domain.UserBank;
import com.syf.mapper.UserBankMapper;
import com.syf.service.UserBankService;
/**
*
*
*@author 苏耀奋
*@create 2021-08-02 14:28
*/
@Service
public class UserBankServiceImpl extends ServiceImpl<UserBankMapper, UserBank> implements UserBankService{

    @Autowired
    private UserService userService ;

    /**
     * 查询用户的银行卡信息
     *
     * @param page  分页参数
     * @param usrId 用户的Id
     * @return
     */
    @Override
    public Page<UserBank> findByPage(Page<UserBank> page, Long usrId) {
        return page(page ,new LambdaQueryWrapper<UserBank>().
                eq(usrId != null ,UserBank::getUserId ,usrId));
    }


    /**
     *  通过用户的ID  查询当前用户的银行卡【前台用户查看】
     * @param userId
     * @return
     */
    @Override
    public UserBank getCurrentUserBank(Long userId) {
        UserBank userBank = getOne(
                new LambdaQueryWrapper<UserBank>()
                        .eq(UserBank::getUserId, userId) //用户id
                        .eq(UserBank::getStatus, 1)); //银行卡的状态： 状态：0，禁用；1，启用
        return userBank;
    }

    /**
     * 只能绑定 一张银行卡
     * @param userId 用户的ID
     * @param userBank 用户的银行卡(银行卡名称,开户人,开户行,开户账号,交易密码)
     *
     *
     * @return
     */
    @Override
    public boolean bindBank(Long userId, UserBank userBank) {
        // 1.先判断 支付密码是否正确【交易密码在创建用户的时候就创建了，属于User表】
        User user = userService.getById(userId);
        String payPassword = userBank.getPayPassword(); //获取前台输入的交易密码(MD5加密):
        BCryptPasswordEncoder bCryptPasswordEncoder = new BCryptPasswordEncoder();
        if(!bCryptPasswordEncoder.matches(payPassword,user.getPaypassword())){
            throw new IllegalArgumentException("用户的支付密码错误") ;
        }

        // 2.更换绑定银行卡（有Id 代表是更换操作）
        Long id = userBank.getId();
        if(id!=null){
            UserBank userBankDb = getById(id); //获取原银行卡信息
            if (userBankDb==null){
                throw new IllegalArgumentException("用户的银行卡的ID输入错误") ;
            }
            return updateById(userBank) ;// 修改值
        }

        // 3.新建银行卡: (若银行卡的id为null ,则需要新建一个)
        userBank.setUserId(userId);
        userBank.setStatus((byte) 1);
        return save(userBank);
    }


}
